#include "APP_Motor.h"


uint16_t Motor_2_Step = 0;

void APP_Motor_1_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct = {0};

	/* GPIO Ports Clock Enable */
	MOTOR_PORT_CLK();

	/*Configure GPIO pin Output Level */
	MOTOR_EN_1_SET();
	MOTOR_SLEEP_1_SET();
	MOTOR_DIR_1_CLR();
	MOTOR_STEP_1_CLR();
	
	/*Configure GPIO pins : PBPin PBPin */
	GPIO_InitStruct.Pin = MOTOR_EN_1_PIN;
	GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
	GPIO_InitStruct.Pull = GPIO_NOPULL;
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
	HAL_GPIO_Init(MOTOR_EN_1_PORT, &GPIO_InitStruct);
	
	GPIO_InitStruct.Pin = MOTOR_SLEEP_1_PIN;
	HAL_GPIO_Init(MOTOR_SLEEP_1_PORT, &GPIO_InitStruct);
	
	GPIO_InitStruct.Pin = MOTOR_DIR_1_PIN;
	HAL_GPIO_Init(MOTOR_DIR_1_PORT, &GPIO_InitStruct);
	
	GPIO_InitStruct.Pin = MOTOR_STEP_1_PIN;
	HAL_GPIO_Init(MOTOR_STEP_1_PORT, &GPIO_InitStruct);


//	/*Configure GPIO pin : PA6 */
//	GPIO_InitStruct.Pin = MOTOR_INDEX_1_PIN;
//	GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
//	GPIO_InitStruct.Pull = GPIO_PULLDOWN;
//	HAL_GPIO_Init(MOTOR_INDEX_1_PORT, &GPIO_InitStruct);

//	/* EXTI interrupt init*/
//	HAL_NVIC_SetPriority(EXTI4_15_IRQn, 0, 1);
//	HAL_NVIC_EnableIRQ(EXTI4_15_IRQn);
}

void APP_Motor_2_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct = {0};

	/* GPIO Ports Clock Enable */
	MOTOR_PORT_CLK();

	/*Configure GPIO pin Output Level */
	MOTOR_EN_2_SET();
	MOTOR_SLEEP_2_SET();
	MOTOR_DIR_2_CLR();
	MOTOR_STEP_2_CLR();

	/*Configure GPIO pins : PBPin PBPin */
	GPIO_InitStruct.Pin = MOTOR_EN_2_PIN;
	GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
	GPIO_InitStruct.Pull = GPIO_NOPULL;
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
	HAL_GPIO_Init(MOTOR_EN_2_PORT, &GPIO_InitStruct);
	
	GPIO_InitStruct.Pin = MOTOR_SLEEP_2_PIN;
	HAL_GPIO_Init(MOTOR_SLEEP_2_PORT, &GPIO_InitStruct);
	
	GPIO_InitStruct.Pin = MOTOR_DIR_2_PIN;
	HAL_GPIO_Init(MOTOR_DIR_2_PORT, &GPIO_InitStruct);
	
	GPIO_InitStruct.Pin = MOTOR_STEP_2_PIN;
	HAL_GPIO_Init(MOTOR_STEP_2_PORT, &GPIO_InitStruct);
}

void APP_Motor_1_BackUp(uint16_t Speed)
{
	static uint8_t Motor_1_BackUp_Status = 0;
	
	MOTOR_EN_1_CLR();
	MOTOR_SLEEP_1_CLR();
	MOTOR_DIR_1_SET();
	
	if(Motor_1_BackUp_Status == 0)
		MOTOR_STEP_1_CLR();
	else
		MOTOR_STEP_1_SET();
	
	Motor_1_BackUp_Status = ~Motor_1_BackUp_Status;
	
	for(uint16_t i=Speed; i>0; i--){}
}

void APP_Motor_1_Forward(uint16_t Speed)
{
	static uint8_t Motor_1_Forward_Status = 0;
	
	MOTOR_EN_1_CLR();
	MOTOR_SLEEP_1_CLR();
	MOTOR_DIR_1_CLR();
	
	if(Motor_1_Forward_Status == 0)
		MOTOR_STEP_1_CLR();
	else
		MOTOR_STEP_1_SET();
	
	Motor_1_Forward_Status = ~Motor_1_Forward_Status;
	
	for(uint16_t i=Speed; i>0; i--){}
}

void APP_Motor_1_Stop(void)
{
	MOTOR_EN_1_SET();
	MOTOR_SLEEP_1_SET();
	MOTOR_DIR_1_CLR();
	MOTOR_STEP_1_CLR();
}

void APP_Motor_2_BackUp(void)
{
	static uint8_t Motor_2_BackUp_Status = 0;
	
	MOTOR_EN_2_CLR();
	MOTOR_SLEEP_2_CLR();
	MOTOR_DIR_2_SET();
	
	if(Motor_2_BackUp_Status == 0)
		MOTOR_STEP_2_CLR();
	else
	{
//		Motor_2_Step++;
		MOTOR_STEP_2_SET();
	}
	
	Motor_2_BackUp_Status = ~Motor_2_BackUp_Status;
	
	for(uint16_t i=2000; i>0; i--){}
}

void APP_Motor_2_Forward(uint16_t Speed)
{
	static uint8_t Motor_2_Forward_Status = 0;
	
	MOTOR_EN_2_CLR();
	MOTOR_SLEEP_2_CLR();
	MOTOR_DIR_2_CLR();
	
	if(Motor_2_Forward_Status == 0)
		MOTOR_STEP_2_CLR();
	else
		MOTOR_STEP_2_SET();
	
	Motor_2_Forward_Status = ~Motor_2_Forward_Status;
	
	for(uint16_t i=Speed; i>0; i--){}
}

void APP_Motor_2_Stop(void)
{
	MOTOR_EN_2_SET();
	MOTOR_SLEEP_2_SET();
	MOTOR_DIR_2_CLR();
	MOTOR_STEP_2_CLR();
}


